package com.mycode.factorymethod03;

import com.mycode.factorymethod03.resolve.Chart;
import com.mycode.factorymethod03.resolve.Factory;
import com.mycode.factorymethod03.resolve.PieChartFactory;

/**
 * 多态工厂----> 工厂方法模式
 * 简单工厂模式虽然简单，但是当需要增加新产品的时候，仍然需要修改工厂类的源代码，根据不同参数映射到不同的产品，这违背了开闭原则
 * 工厂方法模式：就可以做到增加新产品不用改工厂类代码
 *
 * 优点：
 *   1、客户类不用关心具体类的实现细节，只关心所需的产品，具体是实现细节封装在工厂类内部
 *   2、当系统加入新产品时，无需修改抽象工厂和抽象产品提供的接口
 * 缺点：
 *   1、增加具体产品类时，需要提供相对应的具体工厂，系统中类的个数成对增加，提高了系统的复杂性
 *   2、考虑到系统的可扩展性，需要引入抽象层，增加了系统的抽象性和理解难度
 * 使用场景：
 *   1、客户端不知道其所需要的对象的类
 *   2、抽象工厂类通过其子类来指定创建哪个对象
 */
public class Bootstrap {

    public static void main(String[] args) {
        Factory factory = new PieChartFactory();
        Chart chart = factory.createChart();
        chart.display();

    }
}
